import UIKit

/**
    B站：https://www.bilibili.com/video/BV144411C7Gg?p=31
    B站：https://www.bilibili.com/video/BV144411C7Gg?p=32

    第31课 类/结构体
        1. 重载(对方法) : 方法名一致，但是 参数名不同、参数个数不同、参数类型不同
        2. 重写(对方法) :
        3. final (不想让其他类 继承本类)
 */


class Person {
    var name: String = ""
    
    init(name: String) {
        self.name = name
    }
    
    // 重载(只能重载方法): 方法名一致，但是 参数名不同、参数个数不同、参数类型不同
    func getName() -> String {
        return name
    }
    func getName(prefix: String) -> String {
        return prefix + name
    }
}

final class Student: Person {
    private let schoolName: String = "哈佛"
    
    // 重写(只能重写方法)
//    override init(name: String) {
//        ...
//    }
    
    // 重写(只能重写方法)
    override func getName() -> String {
        return "aa_" + schoolName + "_" + name
    }
}


let stu = Student(name: "xiaoming")
print(stu.getName())
print(stu.getName(prefix: "xx__"))





// Inheritance from a final class 'Student'
// error 从final 的类继承
//class XiaoMing: Student {}
